package org.abc.fund.config.ScheduleUpdateConfig;

import lombok.extern.slf4j.Slf4j;
import org.abc.fund.service.dataSourceCollection.FundAnnouncementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

@Configuration
@EnableScheduling
@Slf4j
public class FundAnnouncementScheduleConfig {
    
    @Autowired
    private FundAnnouncementService announcementService;

    /**
     * 季度更新 - 在季度报告发布后执行
     * 1月、4月、7月、10月的第15天凌晨2点
     */
    @Scheduled(cron = "0 0 2 15 1,4,7,10 ?")
    public void quarterlySchedule() {
        log.info("=== 定时任务：季度公告更新开始 ===");
        announcementService.fetchQuarterlyAnnouncements();
        log.info("=== 定时任务：季度公告更新完成 ===");
    }

    /**
     * 半年度更新 - 在半年度报告发布后执行
     * 8月和2月的第20天凌晨3点
     */
    @Scheduled(cron = "0 0 3 20 2,8 ?")
    public void semiAnnualSchedule() {
        log.info("=== 定时任务：半年度公告更新开始 ===");
        announcementService.fetchSemiAnnualAnnouncements();
        log.info("=== 定时任务：半年度公告更新完成 ===");
    }

    /**
     * 年度更新 - 在年度报告集中发布期执行
     * 3月和4月的第10天凌晨4点
     */
    @Scheduled(cron = "0 0 4 10 3,4 ?")
    public void annualSchedule() {
        log.info("=== 定时任务：年度公告更新开始 ===");
        announcementService.fetchAllAnnouncements();
        log.info("=== 定时任务：年度公告更新完成 ===");
    }

    /**
     * 重大事件监控 - 每周一执行一次
     * 周一凌晨1点，监控上周的重大事件
     */
    @Scheduled(cron = "0 0 1 * * MON")
    public void importantEventsSchedule() {
        log.info("=== 定时任务：重大事件监控开始 ===");
        announcementService.fetchImportantEventsAnnouncements();
        log.info("=== 定时任务：重大事件监控完成 ===");
    }

    /**
     * 数据清理 - 每年执行一次
     * 1月1日凌晨5点，清理2年前的旧数据
     */
    @Scheduled(cron = "0 0 5 1 1 ?")
    public void dataCleanupSchedule() {
        log.info("=== 定时任务：数据清理开始 ===");
        announcementService.cleanupOldAnnouncements();
        log.info("=== 定时任务：数据清理完成 ===");
    }
}